package com.linkai.onlinetool.controller;

import com.alibaba.fastjson.JSON;
import com.linkai.onlinetool.entity.User;
import com.linkai.onlinetool.service.UserService;
import com.linkai.onlinetool.util.JwtUtils;
import com.linkai.onlinetool.util.SaltMd5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
* @Description: 与用户登录注册相关的 Controller
* @Param:
* @return:
* @Author: 林凯
* @Date: 2020/10/11
*/
@RestController
public class UserController {

    @Autowired
    UserService userService;

    /**
     * @Description: 用户注册 --  用户注册时需要输入：手机号，昵称，手机验证码，密码
     * @Param: []
     * @return: java.lang.String
     * @Author: 林凯
     * @Date: 2020/10/11
     */
    @PostMapping("/register")
//    @CrossOrigin(value = "http://101.132.147.111:8080", maxAge = 1800, allowedHeaders = "*")
    @CrossOrigin(allowCredentials="true",maxAge = 3600)
    public String register(@RequestBody HashMap<String, String> map) {
//        System.out.println(myUserName + myPassword + myPhoneNumber + myMessageCode);

        Map<String, String> resultMap = new HashMap<>();

        // 获取密码，并加密
        String pwdHash = SaltMd5Util.MD5WithSalt2(map.get("myPassword"));

        User user = new User(null, map.get("myUserName"), map.get("myPhoneNumber"), pwdHash);
        User insert = userService.insert(user);
        if (insert != null) {
            // 注册成功
            resultMap.put("code", "200");
            String resultJSON = JSON.toJSONString(resultMap);
            return resultJSON;
        } else {
            // 注册失败
            resultMap.put("code", "400");
            String resultJSON = JSON.toJSONString(resultMap);
            return resultJSON;
        }

    }

    /**
     * @Description: 用户登录的请求 -- 用户登录时需要输入：手机号，密码（图形验证码部分在前端进行处理）
     * @Param: []
     * @return: java.lang.String
     * @Author: 林凯
     * @Date: 2020/10/11
     */
    @GetMapping("/login")
//    @CrossOrigin(value = "http://101.132.147.111:8080", maxAge = 1800, allowedHeaders = "*")
    @CrossOrigin(allowCredentials="true",maxAge = 3600)
    public String login(@RequestParam("phone") String phone, @RequestParam("password") String password) {

        // 构造一个 map，用于返回json数据
        /*
        *       构造一个 map，用于返回json数据
        *       code:  400 表示登录失败       200 表示登录成功
        * */
        Map<String, String> resultMap = new HashMap<>();

//        userService.queryById()
        User user = userService.queryByPhoneNumber(phone);
        if (user == null) {
            resultMap.put("code", "400");
            String resultJSON = JSON.toJSONString(resultMap);
            return resultJSON;
        }
        System.out.println("userpassword = " + user.getPassword());
        String salt = SaltMd5Util.getSaltFromHash(user.getPassword());
        String inputPassword = SaltMd5Util.MD5WithSalt2(password, salt);
        System.out.println(inputPassword);

        // 将输入的密码加密之后，和数据库中加密的密码进行对比
        if (inputPassword.equals(user.getPassword())) {
            System.out.println("登录成功");

            // 构造一个用于生成 token 的 map，用这个 map 加密生成 token
            Map<String, String> tokenMap = new HashMap<>();
            tokenMap.put("phone", user.getPhone());
            String token = JwtUtils.getToken(tokenMap);
            System.out.println("生成的 token 为：" + token);

            // 为返回值的 map 赋值
            resultMap.put("code", "200");
            resultMap.put("token", token);
            resultMap.put("username", user.getUsername());
            resultMap.put("phonenumber", user.getPhone());

            // 将返回值的 map 格式化成为 json 字符串
            String resultJSON = JSON.toJSONString(resultMap);
            return resultJSON;
        } else {
            System.out.println("登录失败，用户名密码错误");
            resultMap.put("code", "400");
            String resultJSON = JSON.toJSONString(resultMap);
            return resultJSON;
        }

    }
}
